package com.cskaoyan.basic._3operator;

/**
 * 三目运算符
 * 不是很常用,但是有一些比较独到的使用场景,所以还是需要学习一下
 * 三目运算符表示的场景是:
 *      如果xxx就xxx,否者就xxx
 *      其实就是if...else
 * 它的语法是：
 * (条件表达式) ? 表达式1 : 表达式2;
 * 解释:
 * 1.当条件表达式为true时，执行表达式1，否则执行表达式2。
 * 2.三目运算符的最大特点就是，它一定会执行一个表达式，所以它一定会有一个结果。
 * 3.正是由于它必须执行表达式。而语句不能放在表达式的位置，这极大的限制了三目运算符的使用,它远不如if...else灵活常见.
 *
 * if..else其实可以完全覆盖三目运算符的使用,但是三目运算符的语法更加简洁,并且严格来说
 *      三目运算符代码的执行也更加高效
 * 总之:
 *      如果能够用三目运算符就尽量使用三目运算符
 *      当然如果用不了,就用if...else
 *
 * @since 11:11
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo4 {
    public static void main(String[] args) {
        // 求两个数的最大值
        int num1 = 888;
        int num2 = 200;
        // Condition 'num1 > num2' is always 'false'
        int max = (num1 > num2) ? num1 : num2;
        System.out.println(max);

        // 求三个数的最大值
        int num3 = 99999;
        /*
            三目运算符是可以嵌套的
            但实践操作下来,嵌套的三目运算符虽然语法简洁
            但影响了代码的可读性,降低了代码可读性
            建议嵌套时
                最多嵌套一层
           如果有嵌套多层需求,可以先搞一个中间的变量接收
         */
        int max2 = (num1 > num2) ? ((num1 > num3) ? num1 : num3) : ((num2 > num3) ? num2 : num3);
        System.out.println(max2);

        // 求两个数的最大值,但是不接收,而要求在控制台直接输出这个最大值
        // (num1 > num2) ? sout : num2;
        if (num1 > num2){
            System.out.println(num1);
        }else {
            System.out.println(num2);
        }
    }
}
